package cn.iluwen.airline.Mapper;

import cn.iluwen.airline.Entities.Airport;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface AirportMapper {

    /**
     * 查询所有机场
     * @return 机场列表
     */
    @Select("SELECT * FROM airports")
    List<Airport> findAllAirports();
    
    /**
     * 分页查询机场
     * @return 机场列表
     */
    @Select("SELECT * FROM airports ORDER BY airport_id")
    List<Airport> findAirportsWithPaging();
    
    /**
     * 根据机场三字码查询机场
     * @param airportCode 机场三字码
     * @return 机场对象
     */
    @Select("SELECT * FROM airports WHERE airport_code = #{airportCode}")
    Airport findByAirportCode(String airportCode);
    
    /**
     * 根据机场名称模糊查询机场
     * @param airportName 机场名称关键词
     * @return 机场列表
     */
    @Select("SELECT * FROM airports WHERE airport_name LIKE CONCAT('%', #{airportName}, '%')")
    List<Airport> findByAirportNameLike(@Param("airportName") String airportName);
    
    /**
     * 根据城市名称模糊查询机场
     * @param city 城市名称关键词
     * @return 机场列表
     */
    @Select("SELECT * FROM airports WHERE city LIKE CONCAT('%', #{city}, '%')")
    List<Airport> findByCityLike(@Param("city") String city);
    
    /**
     * 根据城市名称精确查询机场
     * @param city 城市名称
     * @return 机场列表
     */
    @Select("SELECT * FROM airports WHERE city = #{city}")
    List<Airport> findByCity(@Param("city") String city);
    
    /**
     * 根据ID查询机场
     * @param airportId 机场ID
     * @return 机场对象
     */
    @Select("SELECT * FROM airports WHERE airport_id = #{airportId}")
    Airport findById(String airportId);
    
    /**
     * 添加机场
     * @param airport 机场对象
     * @return 影响的行数
     */
    @Insert("INSERT INTO airports (airport_id, airport_code, airport_name, city) " +
            "VALUES (#{airportId}, #{airportCode}, #{airportName}, #{city})")
    int insert(Airport airport);
    
    /**
     * 更新机场信息
     * @param airport 机场对象
     * @return 影响的行数
     */
    @Update("UPDATE airports SET airport_code = #{airportCode}, airport_name = #{airportName}, city = #{city} " +
            "WHERE airport_id = #{airportId}")
    int update(Airport airport);
    
    /**
     * 删除机场
     * @param airportId 机场ID
     * @return 影响的行数
     */
    @Delete("DELETE FROM airports WHERE airport_id = #{airportId}")
    int delete(String airportId);
} 